home *** CD-ROM | disk | FTP | other *** search
Text File | 1987-04-26 | 6.8 KB | 290 lines | [TEXT/MACA] |
- terse
- noloc
- ;**************************************************
- ; The Molasses DA
- ; Chris Gehlker
- ; Grand Canyon Code Factory
- ; 3158 W. Woodridge Dr.
- ; Phoenix, AZ 85023
- ; (602) 688-9024
- ;**************************************************
- Title "Mollasses DA $"
- prtr "/E/$45"
- ;**************************************************
- Version define "1.1" Now works with 64K ROM
- ;**************************************************
- ftype 'DFIL'
- fsign 'DMOV'
- ;**************************************************
- ;Includes
- IPATH "HD:Languages:McAssembly:System files:.PSM Files:"
- IF1
- Incl "SysEqu.psm" system equates
- incl "QuickEqu.PSM" quick draw equates
- incl "ToolEqu.PSM" toolbox equates
- incl "RegisterTraps.PSM" register-based trap words
- incl "PushPop.asm" push and pop macros
- incl "IOBase.asm" base all I/O param block syms to a0
- endif
-
- tcomp
-
- ;**************************************************
- ; Register Usage
- ; A0/A1 -- General purpose, toolbox calls may clobber
- ; A2 -- General purpose
- ; A3/A4 -- Hold values in A0/A1
- ; A6 -- Temp storage for pointers
- ; D0/D2 -- General purpose, toolbox calls may clobber
- ;**************************************************
- ;index some stuff of addresses
-
- base A4,dCtlWindow,dCtlRefNum
- base A3,csCode,csParam
- base A0,WindowKind
-
- ;**************************************************
- ;Equates
- dsec 1
- Okay byte 1
- Juice byte 2
- Honey byte 3
- Molasses byte ;4
- Tar byte 5
- dend
- true equ -1
- False equ 0
- On equ 1
- Off equ 0
- AVector equ 40
- Old128Vector equ $401F52
- Old64Vector equ $401018
- _Debug trapw $A9FF
-
- mexp False
- ;**************************************************
- [[ DRVR,20,32,"/0Molasses"
- START DB %1010100 High byte of drvrFlags
- DB 0 Low byte of drvrFlags
- DW 0 drvrDelay
- DW %101101010 drvrEMask
- DW 0 drvrMenu
- DW OPEN_DA-START
- DW 0 No prime routine
- DW CONTROL_DA-START
- DW 0 No status routine
- DW CLOSE_DA-START
- TEXT #"Molasses" DA's name
- ALIGN
-
- ;**************************************************
- ; OPEN_DA routine
- ;**************************************************
- OPEN_DA
- MOVEM.L A0-A6/D0-D7,-(SP) Save registers
- MOVE.L A1,A4
- GetPort !PortHolder
- ;--------------------------------------------------
- ; Find own resource ID
- ;--------------------------------------------------
- TST.L dCtlWindow Are we already open
- BNE OPENED
- ;--------------------------------------------------
- ; Find ROM version
- ;--------------------------------------------------
- LEA NewROM,A0
- MOVE #False,(A0)
- MOVE ROM85,D0
- BTST #15,D0
- BNE.S .old
- LEA NewROM,A0
- MOVE #True,(A0)
- .old LEA START,A0
- _RecoverHandle Find our handle
- GetResInfo A0,!ResID,!ResType,!ResType
- ;--------------------------------------------------
- ; Post Dialog
- ;--------------------------------------------------
- MOVE ResID,D0 Calculate resource ID
- ASL #5,D0
- OR #$C000,D0
- LEA DlgPtr,A6 Save the pointer
- GetNewDialog D0,#0,#-1,(A6)
- GetDItem DlgPtr,#Molasses,!itemType,!itemHandle,!dispRect
- SetCtlValue itemHandle,#On Set molasses as default
- LEA LUBE,A1
- MOVE #Molasses,(A1) Default is molasses
- MOVE.L DlgPtr,A0
- MOVE dCtlRefNum,WindowKind Change to DriverKind
- MOVE.L DlgPtr,dCtlWindow Put window ptr in DCE
- LEAVE SetPort PortHolder Restore the port
- MOVEM.L (SP)+,D0-D7/A0-A6 Restore registers
- MOVE #0,D0 All is well
- RTS
- OPENED SelectWindow DlgPtr Bring our window to front
- BRA.S LEAVE
-
- ;**************************************************
- ; CONTROL_DA routine
- ; On Entry:
- ; A0 -- Pointer to parameter block
- ; A1 -- Pointer to DCE
- ;**************************************************
- CONTROL_DA
- MOVEM.L A0-A6/D0-D7,-(SP) Save registers
- MOVE.L A0,A3
- MOVE.L A1,A4
- GetPort !PortHolder
- MOVE csCode(A3),D0
- CMP #Goodbye,D0
- BEQ.S CLOSE_IT
- CMP #accEvent,D0
- BEQ.S EVENT
- CTL_DONE
- MOVE.L DlgPtr,A0
- MOVE dCtlRefNum,WindowKind
- ByeBye SetPort PortHolder
- MOVEM.L (SP)+,D0-D7/A0-A6
- MOVE #0,D0 Good return
- MOVE.L JIODone,-(SP) Special return address
- RTS
- CLOSE_IT
- LEA NewROM,A0
- TST (A0)
- BNE.S .new
- MOVE.L #Old64Vector,AVector
- BRA.S .old
- .new MOVE.L #Old128Vector,AVector
- .old MOVE.L #0,dCtlWindow
- BRA ByeBye
- EVENT
- MOVE.L csParam,A2
- MOVE (A2),D0
- CMP #keyDwnEvt,D0
- BEQ.S BEEP
- CMP #autoKeyEvt,D0
- BEQ.S BEEP
- CMP #activateEvt,D0
- BEQ.S DIALOG_EVENT
- CMP #mButDwnEvt,D0
- BEQ.S DIALOG_EVENT
- CMP #updatEvt,D0
- BEQ.S DIALOG_EVENT
- BRA.S CTL_DONE
- BEEP MOVE #3,-(SP)
- _SysBeep
- BRA CTL_DONE
- DIALOG_EVENT
- MOVE.L DlgPtr,A0
- MOVE #DialogKind,WindowKind
- IsDialogEvent csParam,=D0
- BTST #0,D0
- BEQ.S CTL_DONE
- DialogSelect csParam,!DlgPtr,!Item,=D0
- BTST #0,D0
- BEQ CTL_DONE
- MOVE Item,D1
- CMP #Okay,D1
- BEQ.S SET_DELAY
- LEA LUBE,A1
- MOVE D1,(A1) Save chosen button
- BSR CLEAR_BUTTONS
- BSR SET_BUTTON
- BRA CTL_DONE
- CLEAR_BUTTONS
- MOVEQ #3,D3 Four buttons
- CLEAR_LOOP
- MOVE D3,D4 Calculate item #
- ADDQ #2,D4
- GetDItem DlgPtr,D4,!itemType,!itemHandle,!dispRect
- SetCtlValue itemHandle,#Off
- DBRA D3,CLEAR_LOOP
- RTS Back to RADIO
- SET_BUTTON
- GetDItem DlgPtr,Item,!itemType,!itemHandle,!dispRect
- SetCtlValue itemHandle,#On
- RTS
- SET_DELAY
- HideWindow DlgPtr
- LEA TIMER,A0 Get TIMER's address
- MOVE.L A0,AVector Reset A-line emulator
- MOVE LUBE,D1 Chosen radio button
- CMP #Juice,D1 Juice chosen?
- BNE.S .old
- LEA NewROM,A0
- TST (A0)
- BNE.S .new
- MOVE.L #Old64Vector,AVector
- BRA.S .old
- .new MOVE.L #Old128Vector,AVector
- .old LEA DlgPtr,A0
- MOVE dCtlRefNum,WindowKind
- BRA.S CTL_DONE
- TIMER
- MOVEM.L D0/D1/A0,-(SP) Save D0 & D1
- MOVE LUBE,D1 Get LUBE
- MOVE #120,D0
- ASL.L D1,D0 Multiply by LUBE
- TIME_LOOP
- NOP Waste some time
- NOP
- DBRA D0,TIME_LOOP
- LEA NewROM,A0
- TST (A0)
- BNE.S .new
- MOVEM.L (SP)+,D0/D1/A0 Restore A0, D0 & D1
- JMP Old64Vector Dispatch trap
- .new MOVEM.L (SP)+,D0/D1/A0 Restore A0, D0 & D1
- JMP Old128Vector Dispatch trap
- ;**************************************************
- ; CLOSE_DA routine
- ;**************************************************
- CLOSE_DA
- MOVEM.L A0-A6/D0-D7,-(SP) Save registers
- MOVE.L A1,A4
- GetPort !PortHolder
- LEA NewROM,A0
- TST.W (A0)
- BNE.S .new
- MOVE.L #Old64Vector,AVector
- BRA.S .old
- .new MOVE.L #Old128Vector,AVector
- .old DisposDialog DlgPtr
- MOVE.L #0,dCtlWindow
- SetPort PortHolder
- MOVEM.L (SP)+,A0-A6/D0-D7
- MOVE #0,D0 Function return
- RTS
- ;**************************************************
- ; Storage
- ;**************************************************
- PortHolder pointer 1
- ResID word 1
- ResType long 1
- ResName byte 256
- Item word 1
- itemType word 1
- itemHandle hdl 1
- dispRect rect 1
- DlgPtr pointer 1
- LUBE word 1
- DEFAULT word 1
- NewROM word 1
- ]]
- list False
- $$ DLOG,-15744,$20,Lube
- 94,74,200,416
- 16
- False,True
- 0
- -15744
- Lube
- $$ DITL,-15744,$20
- 6
- 0,$48,$88,$5C,$C4,4,OK
- 0,$18,0,$28,$148,6,Apple Juice (Manufacturer's Recomendation)
- 0,$28,0,$38,$50,6,Honey
- 0,$38,0,$48,$60,6,Molasses
- 0,$48,0,$58,$50,6,Tar
- 0,0,$58,$10,$F0,136,Lubricate ROMs with:
- END